home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_03
/
9n03054a
< prev
next >
Wrap
Text File
|
1990-12-08
|
2KB
|
62 lines
Listing 4 (lidar_read.c)
/* ---
lidar_read task. This task initializes shared
memory, waits for a message, reads a frame
buffer from the digitizer, and sends a message
to the write task when the frame buffer is full.
--- */
#include "lidar.h"
main()
{
int ieee_488;
int read_qid, write_qid;
int alive_sem;
int terminate = FALSE;
char *fb_shm;
message mptr;
/* --- set process prioprity --- */
setpriority (PRIO_PROCESS, 0, LIDAR_READ);
/* --- open message queues --- */
read_qid = msgget (READ_Q, 0666 | IPC_CREAT);
write_qid = msgget (WRITE_Q, 0666 | IPC_CREAT);
/* --- get semaphore --- */
alive_sem = sem_get (ALIVE_KEY, 0);
/* -- create shared memory frame buffers -- */
fb_shm = shmat(shmget (FB_KEY, FRAME_SIZE*N_FRAMES,
0666|IPC_CREAT), 0, 0);
/* --- open ieee file and set up digitizer --- */
ieee_488 = init_digitizer ();
/* --- tell the world we're open for business --- */
sem_signal (alive_sem);
/* --- while lidar data acquisition program running --- */
while (!terminate) {
/* --- wait for a message to start read --- */
msgrcv (read_qid, &mptr, MSG_SIZE, ANYTYPE, NOFLAGS);
/* --- check for quit --- */
if (mptr.key == QUIT)
terminate = 1;
else
read_digitizer (ieee_488, fb_shm +
mptr.key * FRAME_SIZE);
/* --- send the message on to the write task --- */
msgsnd (write_qid, &mptr, MSG_SIZE, IPC_NOWAIT);
}
/* --- close digitizer file --- */
close_digitizer (ieee_488);
/* --- release memory --- */
shmdt (fb_shm);
}